{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Xinference provides audio-to-text functionality that is compatible with OpenAI Audio. This notebook demonstrates how to use Xinference for speech recognition."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Preparation\n",
    "\n",
    "First, you need to install Xinference:\n",
    "```shell\n",
    "pip install xinference\n",
    "```\n",
    "\n",
    "Whisper model requires the command-line tool [ffmpeg](https://ffmpeg.org/) to be installed on your system, which is available from most package managers:\n",
    "\n",
    "```shell\n",
    "# on Ubuntu or Debian\n",
    "sudo apt update && sudo apt install ffmpeg\n",
    "\n",
    "# on Arch Linux\n",
    "sudo pacman -S ffmpeg\n",
    "\n",
    "# on MacOS using Homebrew (https://brew.sh/)\n",
    "brew install ffmpeg\n",
    "\n",
    "# on Windows using Chocolatey (https://chocolatey.org/)\n",
    "choco install ffmpeg\n",
    "\n",
    "# on Windows using Scoop (https://scoop.sh/)\n",
    "scoop install ffmpeg\n",
    "```\n",
    "\n",
    "Then, start the Xinference server by the following command:\n",
    "```shell\n",
    "xinference-local\n",
    "```\n",
    "\n",
    "The Xinference server will be started:\n",
    "\n",
    "```shell\n",
    "2023-11-02 16:04:55,278 xinference   38878 INFO     Xinference successfully started. Endpoint: http://127.0.0.1:9997\n",
    "2023-11-02 16:04:55,280 xinference.core.supervisor 38878 INFO     Worker 127.0.0.1:32187 has been added successfully\n",
    "2023-11-02 16:04:55,281 xinference.deploy.worker 38878 INFO     Xinference worker successfully started.\n",
    "```\n",
    "\n",
    "Finally, we launch a ChatGLM3 model for tool calls.\n",
    "```shell\n",
    "xinference launch -u whisper-1 -n whisper-large-v3 -t audio\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Audio to text"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is an example audio from [Common Voice](https://commonvoice.mozilla.org/zh-CN). We transcibe it to text and translate it to English.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                <audio  controls=\"controls\" >\n",
       "                    <source src=\"data:audio/mpeg;base64,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\" type=\"audio/mpeg\" />\n",
       "                    Your browser does not support the audio element.\n",
       "                </audio>\n",
       "              "
      ],
      "text/plain": [
       "<IPython.lib.display.Audio object>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import IPython\n",
    "IPython.display.Audio(\"../xinference/model/audio/tests/common_voice_zh-CN_38026095.mp3\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Transcription(text='本列表列出香港航空的航点')"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import openai\n",
    "\n",
    "# The api_key can't be empty, any string is OK.\n",
    "client = openai.Client(api_key=\"not empty\", base_url=\"http://127.0.0.1:9997/v1\")\n",
    "audio_file = open(\"../xinference/model/audio/tests/common_voice_zh-CN_38026095.mp3\", \"rb\")\n",
    "# Transcription\n",
    "completion = client.audio.transcriptions.create(model=\"whisper-1\", file=audio_file)\n",
    "completion"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Translation(text=' This list lists the airlines in Hong Kong.')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Translation\n",
    "completion = client.audio.translations.create(model=\"whisper-1\", file=audio_file)\n",
    "completion"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "audio_file.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Conclusion\n",
    "\n",
    "Xinference is a powerful model inference platform that seamlessly integrates with OpenAI's API for tasks such as speech recognition, text conversation, image generation, and more."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
